package io.awen.common.utils;

public class GeoUtils {

    /**
     * 根据两个位置的经纬度，来计算两地的距离（单位为KM）
     * @param lng1 经度
     * @param lat1 纬度
     * @param lng2
     * @param lat2
     * @return
     */
    public static double getDistance(double lat1, double lng1, double lat2, double lng2) {
        double patm = 2;
        double radLat1 = (lat1 * Math.PI / 180.0);
        double radLat2 = (lat2 * Math.PI / 180.0);
        double difference = radLat1 - radLat2;
        double mdifference = (lng1 * Math.PI / 180.0) - (lng2 * Math.PI / 180.0);
        double distance = patm * Math.asin(Math.sqrt(Math.pow(Math.sin(difference / patm), patm)
                + Math.cos(radLat1) * Math.cos(radLat2)
                * Math.pow(Math.sin(mdifference / patm), patm)));
        distance = distance * 6378.137; // 6378.137是赤道的半径
        return distance;
    }


//    public static String getLately(double lng1, double lat1, List<LnogLat> lnogLats) {
//        List<Double> doubles = new ArrayList<>();
//        List<Map> lnogLatMapList = new ArrayList<>();
//        //依次计算距离
//        for (LnogLat lnogLat : lnogLats) {
//            Map lnogLatMap = new HashMap();
//            double result = getDistance(lng1, lat1, lnogLat.getLng(), lnogLat.getLat());
//            doubles.add(result);
//            LnogLat longlatRes = new LnogLat();
//            longlatRes.setLat(lnogLat.getLat());
//            longlatRes.setLng(lnogLat.getLng());
//            lnogLatMap.put(result, longlatRes);
//            lnogLatMapList.add(lnogLatMap);
//        }
//        //取距离的最小值
//        Double minVal = Collections.min(doubles);
//        //根据最小值获取离指定位置最近的距离
//        for (int i = 0; i < lnogLatMapList.size(); i++) {
//            if (lnogLatMapList.get(i).get(minVal) != null) {
//                return JSON.toJSONString(lnogLatMapList.get(i).get(minVal));//返回最近的经纬度
//            }
//        }
//        return null;
//    }
//
//    public static void main(String[] args) {
//        List<LnogLat> lnogLatList = new ArrayList<>();
//        LnogLat lnogLat1 = new LnogLat();
//        lnogLat1.setLng(111.209203);
//        lnogLat1.setLat(28.042163);
//        lnogLatList.add(lnogLat1);
//        LnogLat lnogLat4 = new LnogLat();
//        lnogLat4.setLng(111.334182);
//        lnogLat4.setLat(27.331331);
//        lnogLatList.add(lnogLat4);
//        System.out.println(getLately(121.348453, 27.823152, lnogLatList));
//    }
}
